package com.roc.producer.messageType;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.client.producer.SendStatus;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.remoting.common.RemotingHelper;

/**
 * 延迟消息-生产者
 *
 * @author Roker
 * @date 2025/07/08
 */
public class DelayMsgProducer {
    public static void main(String[] args) throws Exception {
        // 1、实例化消息生产者，指定组名
        DefaultMQProducer producer = new DefaultMQProducer("roc_producer_group");
        // 2、指定NameServer地址
        producer.setNamesrvAddr("127.0.0.1:9876");
        // 3、启动生产者实例
        producer.start();
        // 4、创建消息实例，指定Topic、Tag和消息内容
        try {
            // 4. 创建消息，指定主题、标签、消息体
            Message message = new Message(
                    "TOPIC_DELAY",
                    null,
                    "这是一条延迟消息，将延迟一段时间后消费".getBytes(RemotingHelper.DEFAULT_CHARSET)
            );
            // 5. 设置延迟级别（RocketMQ 预设延迟级别，如 3 代表延迟 10s，需根据实际配置确认）
            // 延迟级别对应关系：1->1s，2->5s，3->10s，4->30s，5->1m...（不同版本可能有差异，可查阅官方文档）
            message.setDelayTimeLevel(4);
            // 6. 发送消息
            SendResult send = producer.send(message);
            if (send != null && send.getSendStatus() == SendStatus.SEND_OK) {
                System.out.println("延迟消息发送成功，消息将延迟指定时间后被消费，" + send);
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("消息发送失败");
        } finally {
            // 7. 关闭生产者
            producer.shutdown();
        }
    }
}
